<?php
// 声明编码
header("Content-Type:text/html;charset=utf-8");

//连接数据库 成功返回对象 失败返回false
$link = @mysqli_connect("localhost", "root", "root");

//判断是否有报错
if(!$link)
{
    //返回连接出错的信息
    echo "【连接错误】：".mysqli_connect_error();
    exit;
}

//选择数据库
$select = mysqli_select_db($link, "company");

//判断是否有选择数据库失败
if(!$select)
{
    echo "【选择数据库失败】：".mysqli_error($link);
    exit;
}

//设置操作的编码
$charset = mysqli_set_charset($link, "UTF8");

if(!$charset)
{
    echo "【设置编码失败】：".mysqli_error($link);
    exit;
}

// 保留表前缀 全局变量
$pre_ = "pre_";

//插入函数
function insert()
{
    // 引入全局变量
    global $pre_;
    global $link;

    //插入语句
    // INSERT INTO 表名(`字段1`,`字段2`)VALUES('值1','值2') 插入单条数据
    // INSERT INTO 表名(`字段1`,`字段2`)VALUES('值1','值2'),('值1','值2') 插入多条数据
    $sql = "INSERT INTO {$pre_}person(`nickname`,`mobile`,`depid`,`jobid`)VALUES('张三', '1351264455261', '4', '1')";

    //执行sql语句
    $res = mysqli_query($link, $sql);

    //判断语句错误
    if(!$res)
    {
        echo "【SQL语句失败】：".mysqli_error($link);
        exit;
    }

    //判断插入语句是否成功 返回插入的自增ID 插入成功返回id值 插入失败返回0
    return mysqli_insert_id($link);
}

//插入语句 判断是否有返回自增ID mysqli_insert_id
// $insertid = insert();
// var_dump($insertid);



//更新语句
function update()
{
    //引入全局变量
    global $pre_;
    global $link; 

    //语句结构
    // UPDATE 表名 SET `字段1` = '字段1值', `字段2`='值2' WHERE 条件
    $sql = "UPDATE {$pre_}person SET `nickname` = '王五' where id > 10";

    //调试
    // echo $sql;
    // exit;

    //执行语句
    $res = mysqli_query($link, $sql);

    //判断语句错误
    if(!$res)
    {
        echo "【SQL语句失败】：".mysqli_error($link);
        exit;
    }

    //如何判断是否更新语句成功的 影响行数 返回0说明没改动 返回>1影响行数
    return mysqli_affected_rows($link);
}

// $rows = update();
// var_dump($rows);


//删除语句
function delete()
{
    global $link;
    global $pre_;

    // 语句结构
    // DELETE FROM 表名 WHERE 条件
    $sql = "DELETE FROM {$pre_}person WHERE id > 8";

    //调试
    // echo $sql;
    // exit;

    //执行语句
    $res = mysqli_query($link, $sql);

    //判断语句错误
    if(!$res)
    {
        echo "【SQL语句失败】：".mysqli_error($link);
        exit;
    }

    //如何判断是否删除语句成功的 影响行数 返回0说明没改动 返回>1影响行数
    return mysqli_affected_rows($link);
}

// $res = delete();
// var_dump($res);


// 查询语句
// SELECT 查询字段 FROM 表名 WHERE 条件 ORDER BY 排序字段,排序的方式 LIMIT 限制查询条数
// 排序的方式 ASC升序
// 排序的方式 DESC降序

// LIMIT 起始位置(0), 查询的条数

$sql = "SELECT * FROM {$pre_}person"; //查询全部

// AND 逻辑与 必须要两个条件都满足 才返回数据
$sql = "SELECT id,nickname FROM {$pre_}person WHERE id = 1 AND nickname = '张三'";

//BETWEEN AND 在 两者之间
$sql = "SELECT id,nickname FROM {$pre_}person WHERE id BETWEEN 1 AND 10";

//不固定id值去查询 列表查询 IN != NOT IN 取反关系
$sql = "SELECT id,nickname FROM {$pre_}person WHERE id NOT IN(2,8)";

//模糊查询 % 匹配任意字符 任意长度
$sql = "SELECT id,nickname FROM {$pre_}person WHERE nickname LIKE '%张三%' ORDER BY id DESC LIMIT 0,4";


// left join(左联接) 以左边的表为基准，查询所有的数据出来，然后根据左表的数据去找关联表的满足条件的数据

// right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录       
// inner join(等值连接) 只返回两个表中联结字段相等的行

// A:B 1对1 主键=主键
// 表A记录如下：                             表B记录如下:
// aID　　　　　aNum                         bID　　　　　bName
// 1　　　　　a20050111                      1　　　　　2006032401
// 2　　　　　a20050112                      2　　　　　2006032402
// 3　　　　　a20050113                      3　　　　　2006032403
// 4　　　　　a20050114                      4　　　　　2006032404
// 5　　　　　a20050115                      8　　　　　2006032408

// SELECT 查询字段 FROM A表 LEFT JOIN B表 ON 两个表关联的条件 WHERE
// SELECT * FROM A LEFT JOIN B ON A.aID = B.bID
// 结果如下:
// aID　　　　　aNum　　　　　 bID　　　　　bName
// 1　　　　　a20050111　　　　1　　　　　2006032401
// 2　　　　　a20050112　　　　2　　　　　2006032402
// 3　　　　　a20050113　　　　3　　　　　2006032403
// 4　　　　　a20050114　　　　4　　　　　2006032404
// 5　　　　　a20050115　　　　NULL　　　　　NULL


// SELECT * FROM A RIGHT JOIN B ON A.aID = B.bID
// 结果如下:
// aID　　　　　aNum　　　　　 bID　　　　　bName
// 1　　　　　a20050111　　　　1　　　　　2006032401
// 2　　　　　a20050112　　　　2　　　　　2006032402
// 3　　　　　a20050113　　　　3　　　　　2006032403
// 4　　　　　a20050114　　　　4　　　　　2006032404
// NULL　　　　　NULL　　　　　8　　　　　2006032408

// SELECT * FROM A INNER JOIN B ON A.aID = B.bID 内连接以两边同时成立为准
// 结果如下：
// 表A记录如下：                             表B记录如下:
// aID　　　　　aNum                         bID　　　　　bName
// 1　　　　　a20050111                      1　　　　　2006032401
// 2　　　　　a20050112                      2　　　　　2006032402
// 3　　　　　a20050113                      3　　　　　2006032403
// 4　　　　　a20050114                      4　　　　　2006032404

//链表不限制数量 但是链表越多那么sql语句的查询速度就越慢
// AS 表别名 
// ON成立条件 1：n 主键=外键 dep.id = person.depid
// ON成立条件 1：n 主键=外键 job.id = person.jobid
$sql = "SELECT person.*,dep.name AS depname,job.name AS jobname FROM {$pre_}person AS person LEFT JOIN {$pre_}department AS dep ON person.depid = dep.id LEFT JOIN {$pre_}job AS job ON person.jobid = job.id";

// echo $sql;
// exit;


$res = mysqli_query($link, $sql);

//判断语句错误
if(!$res)
{
    echo "【SQL语句失败】：".mysqli_error($link);
    exit;
}

//mysqli_fetch_assoc 从查询的结果集合中一次只拿取一条 拿到结尾处就返回false
$data = [];
while($row = mysqli_fetch_assoc($res))
{
    $data[] = $row;
}
// $data = mysqli_fetch_assoc($res); //关联数组
// $data = mysqli_fetch_row($res); //索引数组
// $data = mysqli_fetch_all($res); //直接返回所有的结果 索引数组
// $data = mysqli_fetch_array($res); //索引数组+关联数组
// $data = mysqli_fetch_object($res); //返回对象

var_dump($data);
exit;






